The Internet has evolved into a complex distributed system, and has become an important aspect of day-to-day life. Achieving reliable communication from a user to a web site, such as Google.com, is a challenging task, and depends on multiple aspects most of which are beyond the control of either the user or the website. This is because the Internet operates in a truly distributed manner in which packets travel over multiple independent organizations or ISPs. Network failures, also called network brownouts, can occur because of various problems such as server failures, overloaded servers, fiber cuts in the communication path, router failure, misconfigured policies by ISPs, problems in the Domain Name System (DNS), and the like. The DNS is the system that is responsible for translating text-based domain names, such as “Google.com,” into Internet Protocol (IP) numbers. Whenever a user visits a web site using the text-based domain name “google.com”, the “google.com” DNS servers first receive a DNS query packet. The path traversed by a DNS packet can be different than the path traversed by the actual user request.